//
//  OAuthViewControler.swift
//  NSinaWeibo
//
//  Created by LoliQueen on 16/2/17.
//  Copyright © 2016年 LoliQueen. All rights reserved.
//

import UIKit
import AFNetworking
//导入指示器框架
import SVProgressHUD

class OAuthViewControler: UIViewController {
    
    //设置属性webView 用于加载网页
    let webView = UIWebView()
    override func loadView() {
        view = webView
        //谁webview 的代理方法，设置加载指示器 并获得授权的code
        webView.delegate = self
    }
    override func viewDidLoad() {
        //设置认证界面的导航栏
        //手写代码 根视图的背景色默认是 透明的
        //webView 的背景默认是白色 不透明
        //        view.backgroundColor = UIColor.whiteColor()
        //关闭
        navigationItem.leftBarButtonItem = UIBarButtonItem(title: "关闭", style: .Plain, target: self, action: "close")
        //注册
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "测试账号", style: .Plain, target: self, action: "getAcount")
        
        //通过webView 加载授权页面
        loadOAuthPage()
    }
    //原因：一旦addtarget action 对应的方法 添加了private，消息循环就找不到该方法
    //解决：在方法前添加@objc 告诉消息循环该方法是基于OC消息动态机制派发 来执行
    //或不加 private 不设置为私有
    @objc private func close(){
        dismissViewControllerAnimated(true, completion: nil)
    }
    
    ///通过字符串，执行js代码，获得 账号和密码，省去每次的输入
    func getAcount(){
        //本地代码和webView的交互
        let jsString = "document.getElementById('userId').value = '13035463518',document.getElementById('passwd').value = 'xinlang131111'"
        webView.stringByEvaluatingJavaScriptFromString(jsString)
    }
    
    private func loadOAuthPage(){
        let urlString = "https://api.weibo.com/oauth2/authorize?client_id=" + appKey + "&redirect_uri=" + redirectUrl
        let url = NSURL(string: urlString)
        //获取请求对象
        let request = NSURLRequest(URL:url!)
        //webView 请求网页
        webView.loadRequest(request)
    }
    
}

//扩展，专门处理webView的代理方法
extension OAuthViewControler:UIWebViewDelegate{
    
    //开始加载网页，使用第三方框架 显示指示器
    func webViewDidStartLoad(webView: UIWebView) {
        //显示指示器
        SVProgressHUD.show()
    }
    func webViewDidFinishLoad(webView: UIWebView) {
        //关闭指示器
        SVProgressHUD.dismiss()
    }
    
    //获取授权后的 code(授权码)
    //shouldStartLoadWithRequest 每次加载新的页面 都会重新发起一个request
    //协议方法 返回值 为 bool类型 一般返回 true 提供协议的对象才能够正常工作
    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        print(request.URL)
        
        //将URL转换成字符串
        guard let urlString = request.URL?.absoluteString else{
            //URL为空的话，
            return false
        }
        //判断urlString是否包含 code
        if urlString.containsString("code"){
            //如果有值，截取code 授权码
            guard let query = request.URL?.query else{
                //如果 query为空
                return false
            }
            let codeStr = "code="
            let code = (query as NSString).substringFromIndex(codeStr.characters.count)
            print(query,code)
            
            //根据code 换取token令牌
//            loadAccessToken(code)
            AccountViewModel.shareAccountViewModel.loadAccessToken(code, finished: { (isSucess) -> () in
                //登陆成功 销毁授权认证控制器
                self.dismissViewControllerAnimated(true, completion: nil)
                //跳转到 主页面
//                UIApplication.sharedApplication().keyWindow?.rootViewController = WelcomeViewController()
                //使用通知  主界面标记为nil  欢迎界面标记为welcome
                NSNotificationCenter.defaultCenter().postNotificationName(KChooseRootVC, object: nil)
            })
            
            //有code 就可以获得token 并获得用户信息 登陆 就不用再回到 授权的回调页面
            return false
            
        }
        
        return true
    }
    
    
    
    
}
